package cn.wolfcode.controller;

import cn.wolfcode.service.IDocumentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import reactor.core.publisher.Mono;

import java.util.List;

@RestController // 1.将当前类创建对象纳入到 Spring 容器中。2.不返回页面，只返回数据。
@RequestMapping("/api/auth")
public class DocumentController {

    @Autowired
    private IDocumentService documentService;

    @PostMapping("/upload")
    // @RequestParam("file")  接收前台传递的叫做 file 的参数
    // List<MultipartFile> files  因为可以多文件上传，所以我们需要使用 List 集合封装
    // MultipartFile 多类型的文件。我们接收文件都使用这个类型的形参。
    public Mono<ResponseEntity<String>> upload(@RequestParam("file") List<MultipartFile> files){
        // 调用业务层来处理文件上传请求。
        Mono<String> result = documentService.upload(files);
        // 封装最终向前端返回的数据。
        Mono<ResponseEntity<String>> ret = result.map(ResponseEntity :: ok)        // 若成功则返回正常数据
                .defaultIfEmpty(ResponseEntity.badRequest().body("上传失败")); // 若没有告诉用户上传失败
        return ret;
    }
}
